package com.prop.utils;

import com.aspose.cells.*;
import com.aspose.cells.FillType;
import com.aspose.cells.TextBox;

import org.springframework.core.io.ClassPathResource;

import java.io.InputStream;
import java.util.Properties;

public class FileAddTextBoxInExcel {

    /**
     * 在指定的 Excel 文件中添加密级信息文本框。
     *
     * @param filePath Excel 文件的路径。
     * @throws Exception 如果处理文件或配置过程中出现问题时抛出异常。
     */
    public static void addTextbox(String filePath, String classificationLevel, String classificationPeriod) throws Exception {

        String messageStr = FilePropertyUtils.getClassificationContext(classificationLevel,classificationPeriod);

        // 声明 Aspose 授权
        try (InputStream AsposeLicenseFile = new ClassPathResource("license.xml").getInputStream()) {
            License license = new License();
            license.setLicense(AsposeLicenseFile); // 通过授权文件初始化 Aspose
        }

        // 从配置文件中加载属性
        Properties properties = new Properties();
        try (InputStream input = new ClassPathResource("app.properties").getInputStream()) {
            properties.load(input); // 加载配置文件 app.properties
        }

        // 判断是否需要添加文本框
        boolean addTextbox = Boolean.parseBoolean(properties.getProperty("addTextboxExcel", "false"));

        if (!addTextbox) {
            return; // 如果配置中不要求添加文本框，则直接返回
        }

        // 加载 Excel 文档
        Workbook workbook = new Workbook(filePath);
        Worksheet worksheet = workbook.getWorksheets().get(0); // 获取第一个工作表

        // 检查是否已有包含“机密”信息的文本框
        boolean containsSecret = false;
        ShapeCollection shapes = worksheet.getShapes();

        // 遍历所有形状，检查是否已存在密级信息
        for (int i = 0; i < shapes.getCount(); i++) {
            com.aspose.cells.Shape shape = shapes.get(i);
            if (shape.getText() != null
                    && (shape.getText().contains("核心商密▲")
                    || shape.getText().contains("普通商密▲")
                    || shape.getText().contains("秘密★")
                    || shape.getText().contains("机密★")
                    || shape.getText().contains("非密")
                    || shape.getText().contains("内部"))
            ) {
                containsSecret = true; // 如果找到了相关信息，标记为已存在密级文本框
                break;
            }
        }

        // 如果没有包含密级信息的文本框，则添加新的文本框
        if (!containsSecret) {
            int textboxIndex = worksheet.getTextBoxes().add(
                    Integer.parseInt(properties.getProperty("textboxExcel.top", "0")),     // 顶部位置
                    Integer.parseInt(properties.getProperty("textboxExcel.left", "0")),    // 左侧位置
                    Integer.parseInt(properties.getProperty("textboxExcel.height", "50")), // 高度
                    Integer.parseInt(properties.getProperty("textboxExcel.width", "150"))  // 宽度
            );

            // 从 JSON 中获取密级内容
//            String classification = FilePropertyUtils.getClassificationFromJSONStr(json);
//            String classification = "秘密";

            // 设置文本框的文字及样式
            TextBox tb1 = worksheet.getTextBoxes().get(textboxIndex);
            tb1.setName("MyTextBox2"); // 设置文本框名称   todo 文本框名字后续也许有用
            tb1.setText(messageStr); // 设置密级文本内容
            tb1.getFont().setName(properties.getProperty("textboxExcel.fontName", "SimHei")); // 设置字体
            tb1.getFont().setSize(Integer.parseInt(properties.getProperty("textboxExcel.fontSize", "16"))); // 设置字体大小
            tb1.getFill().setFillType(FillType.NONE); // 设置文本框为透明背景
            tb1.getLine().setTransparency(1); // 设置文本框无边框

            // 保存修改后的 Excel 文档
            workbook.save(filePath);
        }
    }

}
